home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
ask
/
source_
/
2devchec.s
next >
Wrap
Text File
|
1998-10-01
|
2KB
|
93 lines
*--------------------------------------------------------------------
* デバイスドライバー常駐チェック関数2
*--------------------------------------------------------------------
.include iocscall.mac
.xref GetNulPoint
.text
* int DevCheck2(unchar *sdev,unchar *devname)
* sdev : 隠しデバイス名
* devname : 実際のデバイス名を格納するエリア
* devname=NULLなら格納しない
*--------------------------------------------------------------------
.xdef _DevCheck2
_DevCheck2:
* 指定のデバイスドライバが存在するかどうかを調べる(キャラクターデバイス専用)
* 4(sp) <- 調べる隠しデバイス名
* $00で終わる文字列でも8文字のデバイス名そのものでもどちらでも良い
* 8(sp) <- 本来のデバイス名を格納するワークエリア
* [8+1]以上を確保すること
* NULLの時は格納しない。
* リターン値
* d0.l:存在しているかどうか a0:デバイスヘッダーアドレス
* = $00 ... 存在していない 不変
* = $ff ... 存在している 見つけたデバイスドライバーのヘッダーアドレス
movem.l 4(sp),d0/d1
movem.l d7/a1-a5,-(sp)
move.l d0,a2 * 隠しデバイス名
move.l d1,a5 * 本来のデバイス名格納エリア
*
* 比較するデバイス名の長さを得る -> d7.w
move.l a2,a1
moveq.l #-1,d7 * 名前比較のdbraのため
@@: move.b (a1)+,d0
beq @f
cmp.b #' ',d0
beq @f
addq.w #1,d7
cmp.w #8-1,d7
bcs @b
@@: *
sub.l a1,a1 * a1.l=0
IOCS _B_SUPER * super visor mode
move.l d0,-(sp)
*
bsr GetNulPoint * -> a1(NUL)
*
@@: lea 22(a1),a3 * 隠しデバイス名
move.l a2,a4
move.w d7,d0
1: cmp.b (a4)+,(a3)+
dbne d0,1b
beq FoundDev * 一致
NextDev: * 不一致
move.l (a1),a1 * 次へ
cmp.l #-1,a1
bne @b
* 見つからなかった
moveq.l #0,d7 * a0は不変
move.b d7,(a5) * デバイス名なし($00)
bra.s @f
*
FoundDev: * 見つかった
move.l a1,a0 * デバイスヘッダーアドレス
st.b d7 * 見つかった
* 本来のデバイス名を転送する
cmp.l #0,a5
beq @f * NULL指定なら転送しない
*
lea 14(a0),a4 * デバイス名
moveq.l #8-1,d2 * -1 dbra
3: move.b (a4)+,d1
cmp.b #' ',d1 * ' 'の直前まで
beq 2f
move.b d1,(a5)+
dbra d2,3b * または8バイトまで
2: clr.b (a5) * EOS
*
@@: move.l (sp)+,d0
bmi @f * 元からsuper visorであった
move.l d0,a1
IOCS _B_SUPER * user mode
@@: *
moveq.l #0,d0 * for .b = .l
move.b d7,d0
movem.l (sp)+,d7/a1-a5
rts
*--------------------------------------------------------------------
.end